#!/bin/bash
#********************************************************************************
#* Description  :  智能策略系统初始化完成标志检测
#*
#* 参数：
#*		MYSQL_HOST		mysql的ip
#*		TAR_USERNAME	数据库用户名
#*		TAR_PASSWORD	数据库密码
#*		MYSQL_DATABASE	数据库库名
#*		TABLE_NAME	   表名
#*
#*		EXEC_FREQUENCY	执行频率
#*		IN_TRADE_DATE		查询该日期的标志位
#*	  自定义 usage() 函数, 实现帮助文档
#*
#* Copyright © 2023 西南证券. All Rights Reserved.
#********************************************************************************

# 配置 MySQL 连接信息
MYSQL_HOST=${MYSQL_HOST}
MYSQL_PORT="3306"
MYSQL_USER=${TAR_USERNAME}
MYSQL_PASSWORD=${TAR_PASSWORD}
MYSQL_DATABASE=${MYSQL_DATABASE}
TABLE_NAME=${TABLE_NAME}

usage() {
    cat <<EOF
Description
    This is a help document.
Usage:
    $0 -d <业务日期> -f <执行频率> -t <完成延时>
Option:
    -d *必需, 请输入业务日期. 例如: 20231116
        说明: 日期格式为[yyyyMMdd]
    -f *必需, 请输入执行频率(分钟). 例如: 1
    -h 查看帮助文档.
EOF
    exit 10
}

# 定义日志记录函数
logger() {
    echo -e $(date +%Y/%m/%d\ %H:%M:%S) : ${0##.*/} [${1}]- "${2}"
}

# 参数校验
while getopts "d:f:t:h:" OPTS; do
    case ${OPTS} in
    d)
        IN_TRADE_DATE="${OPTARG}"
        ;;
    f)
        EXEC_FREQUENCY="${OPTARG}"
        ;;
    h)
        usage
        ;;
    ?)
        logger "ERROR" "${OPTS} 该参数不存在"
        usage
        ;;
    esac
done

if [ x${IN_TRADE_DATE} = x ]; then
    logger "ERROR" "[-d] - 业务日期参数不能为空"
    usage
elif ! [ $(expr match ${IN_TRADE_DATE} "[1-3][0-9][0-9][0-9][0-1][0-9][0-3][0-9]") = 8 ]; then
    logger "ERROR" "[-d] - 业务日期参数格式错误"
    usage
elif [ x${EXEC_FREQUENCY} = x ]; then
    logger "ERROR" "[-f] - 执行频率参数不能为空"
    usage
fi

# 设置环境变量
export LANG=zh_CN.UTF8
# 当前的 shell 环境中执行初始化,任何 shell 配置将在执行 source 命令后立即生效。
source /usr/local/dolphinscheduler/TDH-Client/init.sh

# 执行初始化标志检测
SQL_ERROR_COUNT=0
DATE_RESULT=${IN_TRADE_DATE}
sqlStr="SELECT count(*) FROM ai_data_push_task_log WHERE table_name = ${TABLE_NAME} AND comp_flag = 1 AND trade_date = ${DATE_RESULT};"
while true; do
    CHECK_RESULT=$(mysql -h ${MYSQL_HOST} -P ${MYSQL_PORT} -u ${MYSQL_USER} -p${MYSQL_PASSWORD} -D${MYSQL_DATABASE} -e "$sqlStr" --skip-column-names)
    logger "INFO" "[Org] - 获取查询结果=${CHECK_RESULT}"
    if [ ${CHECK_RESULT} == 1 ]; then
        logger "INFO" "[Runing] - 已检测到初始化完成标志"
        logger "INFO" "[End] - 任务执行完成"
        exit 0
    elif [ ${CHECK_RESULT} == 0 ]; then
        logger "INFO" "[Runing] - 未检测到初始化完成标志"
        logger "INFO" "[Runing] - 任务将再${EXEC_FREQUENCY}分钟后继续检测"
        sleep ${EXEC_FREQUENCY}m
        continue
    else
        logger "ERROR" "[its] - sql执行错误, 获取初始化标志出错"
        if [ ${SQL_ERROR_COUNT} -ge 3 ]; then
            logger "ERROR" "[its] - sql执行错误次数超过3次, 即将退出初始化标志位检测程序"
            exit 20
        fi
        SQL_ERROR_COUNT=`expr ${SQL_ERROR_COUNT} + 1`
        logger "INFO" "[Runing] - SQL_ERROR_COUNT=${SQL_ERROR_COUNT}"
        sleep ${EXEC_FREQUENCY}m
        continue
    fi
done